ডেলিগেট কী এবং এর ব্যবহার

Microsoft Technologies - সি শার্প (C#) - ডেলিগেট এবং ইভেন্ট | NCTB BOOK

ডেলিগেট হলো সি#-এর একটি বিশেষ ধরনের রেফারেন্স টাইপ, যা মেথডকে রেফারেন্স করতে ব্যবহৃত হয়। সহজ ভাষায়, ডেলিগেট হচ্ছে এক ধরনের পয়েন্টার যা নির্দিষ্ট সিগনেচারের মেথডকে নির্দেশ করে। এটি ফাংশন পয়েন্টারের মতো কাজ করে এবং প্রোগ্রামে ফাংশনকে প্যারামিটার হিসাবে পাঠাতে সাহায্য করে।

ডেলিগেট ব্যবহার করে, আপনি একাধিক মেথডকে একটি একক রেফারেন্সের অধীনে সংযুক্ত করতে পারেন। এটি প্রায়ই ইভেন্ট হ্যান্ডলিং, কাস্টম কনফিগারেশন এবং অ্যাসিঙ্ক্রোনাস মেথড কলের জন্য ব্যবহৃত হয়।

ডেলিগেট তৈরি করার নিয়ম

ডেলিগেট ঘোষণার জন্য নিচের নিয়মটি মেনে চলতে হয়:

delegate returnType DelegateName(parameterList);
  • returnType: মেথডের রিটার্ন টাইপ।
  • DelegateName: ডেলিগেটের নাম।
  • parameterList: মেথডে পাঠানো প্যারামিটারগুলোর তালিকা।

উদাহরণ ১: ডেলিগেটের মৌলিক ব্যবহার

নিচে একটি সাধারণ উদাহরণ দেওয়া হলো যেখানে একটি ডেলিগেট ঘোষণা করা হয়েছে এবং একটি মেথডকে পয়েন্ট করছে।

using System;

// ডেলিগেট ঘোষণা
public delegate void DisplayMessage(string message);

public class Program
{
    // একটি মেথড যা ডেলিগেটের সাথে মিলিত
    public static void ShowMessage(string message)
    {
        Console.WriteLine(message);
    }

    public static void Main()
    {
        // ডেলিগেট ইনস্ট্যান্স তৈরি করা এবং মেথড অ্যাসাইন করা
        DisplayMessage display = ShowMessage;

        // ডেলিগেট কল করা
        display("Hello, this is a delegate example!");
    }
}

উপরে DisplayMessage নামে একটি ডেলিগেট তৈরি করা হয়েছে, যা string প্যারামিটার গ্রহণ করে এবং কিছু রিটার্ন না করে। এই ডেলিগেটকে ShowMessage মেথডের সাথে অ্যাসাইন করা হয়েছে এবং পরে display ডেলিগেট কল করা হয়েছে, যা ShowMessage মেথডটিকে কল করে।

ডেলিগেট কেন প্রয়োজন?

ডেলিগেট ব্যবহারের মাধ্যমে প্রোগ্রামে কিছু গুরুত্বপূর্ণ সুবিধা পাওয়া যায়:

  1. ইভেন্ট হ্যান্ডলিং: ইভেন্টের জন্য ডেলিগেট অত্যন্ত গুরুত্বপূর্ণ, কারণ ইভেন্টগুলিতে একাধিক মেথড যুক্ত বা বিচ্ছিন্ন করা যায়।
  2. কাস্টম কনফিগারেশন: ডেলিগেট ব্যবহারের মাধ্যমে একটি নির্দিষ্ট কার্যক্রমকে সহজেই পরিবর্তন করা যায়, ফলে প্রোগ্রামে আরও ফ্লেক্সিবিলিটি পাওয়া যায়।
  3. মেথড পাস করা: ডেলিগেট ব্যবহার করে একটি মেথডকে অন্য মেথডে প্যারামিটার হিসেবে পাঠানো যায়।

উদাহরণ ২: ডেলিগেট ব্যবহার করে ক্যালকুলেটর তৈরি করা

নিচে Calculator নামের একটি ক্লাসে কয়েকটি অ্যারিথমেটিক অপারেশন করা হয়েছে এবং প্রতিটি অপারেশন ডেলিগেট ব্যবহার করে কল করা হয়েছে।

using System;

// ডেলিগেট ঘোষণা
public delegate int Calculate(int a, int b);

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Subtract(int a, int b)
    {
        return a - b;
    }
}

public class Program
{
    public static void Main()
    {
        Calculator calc = new Calculator();

        // ডেলিগেটের ইনস্ট্যান্স তৈরি এবং মেথড অ্যাসাইন
        Calculate addOperation = calc.Add;
        Calculate subtractOperation = calc.Subtract;

        // ডেলিগেট কল করা
        Console.WriteLine("Addition: " + addOperation(10, 5));
        Console.WriteLine("Subtraction: " + subtractOperation(10, 5));
    }
}

উপরের উদাহরণে, Calculate নামে একটি ডেলিগেট তৈরি করা হয়েছে, যা দুটি int প্যারামিটার গ্রহণ করে এবং একটি int রিটার্ন করে। এই ডেলিগেটকে Add এবং Subtract মেথডের সাথে যুক্ত করা হয়েছে।

মাল্টিকাস্ট ডেলিগেট

ডেলিগেটগুলোর একটি বৈশিষ্ট্য হলো মাল্টিকাস্ট ডেলিগেট। অর্থাৎ, একটি ডেলিগেটে একাধিক মেথড অ্যাসাইন করা সম্ভব এবং এগুলো ক্রমানুসারে কল করা হবে।

using System;

// ডেলিগেট ঘোষণা
public delegate void Notify();

public class Notifications
{
    public void EmailNotification()
    {
        Console.WriteLine("Sending email notification...");
    }

    public void SMSNotification()
    {
        Console.WriteLine("Sending SMS notification...");
    }
}

public class Program
{
    public static void Main()
    {
        Notifications notifications = new Notifications();

        // মাল্টিকাস্ট ডেলিগেট
        Notify notifyAll = notifications.EmailNotification;
        notifyAll += notifications.SMSNotification;

        // ডেলিগেট কল করা
        notifyAll();
    }
}

এখানে, Notify ডেলিগেট EmailNotification এবং SMSNotification মেথড দুটি পয়েন্ট করছে। notifyAll ডেলিগেট কল করলে উভয় মেথড ক্রমানুসারে কল হবে।

ডেলিগেটের সংক্ষিপ্ত রূপ: Func, Action, এবং Predicate

সি# এ ডেলিগেটের কিছু প্রি-ডিফাইনড ফর্ম রয়েছে:

Func: এটি একটি ডেলিগেট যা এক বা একাধিক ইনপুট প্যারামিটার গ্রহণ করে এবং একটি আউটপুট প্রদান করে।

Func<int, int, int> add = (a, b) => a + b;
Console.WriteLine(add(10, 5)); // আউটপুট: 15

Action: এটি একটি ডেলিগেট যা এক বা একাধিক ইনপুট প্যারামিটার গ্রহণ করে, কিন্তু কিছু রিটার্ন করে না।

Action<string> greet = name => Console.WriteLine("Hello, " + name);
greet("John"); // আউটপুট: Hello, John

Predicate: এটি একটি ডেলিগেট যা একটি ইনপুট প্যারামিটার গ্রহণ করে এবং একটি bool রিটার্ন করে।

Predicate<int> isEven = x => x % 2 == 0;
Console.WriteLine(isEven(4)); // আউটপুট: True

সংক্ষেপে

ডেলিগেট সি# প্রোগ্রামিংয়ে মেথডের রেফারেন্স ধরে রাখা, মেথড পাস করা, এবং মাল্টিকাস্টিংয়ের জন্য ব্যবহার করা হয়। এটি ইভেন্ট হ্যান্ডলিং, কাস্টম কনফিগারেশন এবং বিভিন্ন ফাংশনাল প্রোগ্রামিং কার্যক্রমে ব্যবহারযোগ্য।

Content added By
Promotion